home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 …SCII & the Runetime Code / ADC Developer CD (1992-07) (''Butch ASCII And The Runtime Code'')_iso / Dev.CD 199207.iso / Tools & Apps / Devices & Hardware / A⁄ROSE / FileManager / FileGlue.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-18  |  11.3 KB  |  551 lines  |  [TEXT/MPS ]

  1. /********************************************************************************/
  2. /*                                                                                */
  3. /*        FileGlue.c - A/ROSE file system glue.                                    */
  4. /*                                                                                */
  5. /*        Richard W. Mincher.  December 20, 1989.                                    */
  6. /*                                                                                */
  7. /*        Modified by Anumele D. Raja on June 17, 1991                            */
  8. /*            Changed all the names of file manager calls with A in the front        */
  9. /*                                                                                */
  10. /*        Copyright © 1989-1991 Apple Computer, Inc.  All rights reserved.        */
  11. /*                                                                                */
  12. /********************************************************************************/
  13.  
  14. #include    "Types.h"
  15. #ifdef        APPLEIPC
  16. #include    "CursorCtl.h"
  17. #include    "Memory.h"
  18. #endif        APPLEIPC
  19. #include    "AROSE.h"
  20. #include    "Managers.h"
  21.  
  22. #include    "FileTask.h"
  23.  
  24. short
  25. AFSOpen( char *fileName, short vRefNum, short *refNum )
  26. {
  27.     message    *msg;
  28.     long    mid;
  29.     short    temp;
  30.     
  31.     msg = GetMsg();
  32.     msg->mTo = GetFSTid();
  33.     msg->mSData[0] = vRefNum;
  34.     msg->mDataPtr = fileName;
  35.     for(temp=0; fileName[temp]; temp++ )    // Find the length of the string fileName
  36.         ;
  37.     msg->mDataSize = temp;
  38.     msg->mCode = FS_OPEN;
  39.     mid = msg->mId;
  40.     Send( msg );
  41. #ifdef    APPLEIPC
  42.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  43.         SpinCursor( 1 );
  44. #else    APPLEIPC
  45.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  46. #endif    APPLEIPC
  47.     temp = msg->mStatus;
  48.     *refNum = msg->mSData[0];
  49.     FreeMsg( msg );
  50.     return temp;
  51. }
  52.  
  53. short
  54. AOpenRF( char *fileName, short vRefNum, short *refNum )
  55. {
  56.     message    *msg;
  57.     long    mid;
  58.     short    temp;
  59.     
  60.     msg = GetMsg();
  61.     msg->mTo = GetFSTid();
  62.     msg->mSData[0] = vRefNum;
  63.     msg->mDataPtr = fileName;
  64.     for(temp=0; fileName[temp]; temp++ )
  65.         ;
  66.     msg->mDataSize = temp;
  67.     msg->mCode = FS_OPENRF;
  68.     mid = msg->mId;
  69.     Send( msg );
  70. #ifdef    APPLEIPC
  71.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  72.         SpinCursor( 1 );
  73. #else    APPLEIPC
  74.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  75. #endif    APPLEIPC
  76.     temp = msg->mStatus;
  77.     *refNum = msg->mOData[0];
  78.     FreeMsg( msg );
  79.     return temp;
  80. }
  81.  
  82. short
  83. AFSRead( short refNum, long *count, char *buffPtr )
  84. {
  85.     message    *msg;
  86.     long    mid;
  87.     short    temp;
  88.     
  89.     msg = GetMsg();
  90.     msg->mTo = GetFSTid();
  91.     msg->mSData[0] = refNum;
  92.     msg->mDataPtr = buffPtr;
  93.     msg->mDataSize = *count;
  94.     msg->mCode = FS_READ;
  95.     mid = msg->mId;
  96.     Send( msg );
  97. #ifdef    APPLEIPC
  98.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  99.         SpinCursor( 1 );
  100. #else    APPLEIPC
  101.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  102. #endif    APPLEIPC
  103.     *count = msg->mDataSize;
  104.     temp = msg->mStatus;
  105.     FreeMsg( msg );
  106.     return temp;
  107. }
  108.  
  109. short
  110. AFSWrite( short refNum, long *count, char *buffPtr )
  111. {
  112.     message    *msg;
  113.     long    mid;
  114.     short    temp;
  115.     
  116.     msg = GetMsg();
  117.     msg->mTo = GetFSTid();
  118.     msg->mSData[0] = refNum;
  119.     msg->mDataPtr = buffPtr;
  120.     msg->mDataSize = *count;
  121.     msg->mCode = FS_WRITE;
  122.     mid = msg->mId;
  123.     Send( msg );
  124. #ifdef    APPLEIPC
  125.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  126.         SpinCursor( 1 );
  127. #else    APPLEIPC
  128.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  129. #endif    APPLEIPC
  130.     *count = msg->mDataSize;
  131.     temp = msg->mStatus;
  132.     FreeMsg( msg );
  133.     return temp;
  134. }
  135.  
  136. short
  137. AGetFPos( short refNum, long *filePos )
  138. {
  139.     message    *msg;
  140.     long    mid;
  141.     short    temp;
  142.     
  143.     msg = GetMsg();
  144.     msg->mTo = GetFSTid();
  145.     msg->mSData[0] = refNum;
  146.     msg->mCode = FS_GETFPOS;
  147.     mid = msg->mId;
  148.     Send( msg );
  149. #ifdef    APPLEIPC
  150.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  151.         SpinCursor( 1 );
  152. #else    APPLEIPC
  153.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  154. #endif    APPLEIPC
  155.     *filePos = msg->mOData[0];
  156.     temp = msg->mStatus;
  157.     FreeMsg( msg );
  158.     return temp;
  159. }
  160.  
  161. short
  162. ASetFPos( short refNum, short posMode, long posOff )
  163. {
  164.     message    *msg;
  165.     long    mid;
  166.     short    temp;
  167.     
  168.     msg = GetMsg();
  169.     msg->mTo = GetFSTid();
  170.     msg->mSData[0] = refNum;
  171.     msg->mCode = FS_SETFPOS;
  172.     msg->mOData[0] = posMode;
  173.     msg->mOData[1] = posOff;
  174.     mid = msg->mId;
  175.     Send( msg );
  176. #ifdef    APPLEIPC
  177.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  178.         SpinCursor( 1 );
  179. #else    APPLEIPC
  180.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  181. #endif    APPLEIPC
  182.     temp = msg->mStatus;
  183.     FreeMsg( msg );
  184.     return temp;
  185. }
  186.  
  187. short
  188. AGetEOF( short refNum, long *logEOF )
  189. {
  190.     message    *msg;
  191.     long    mid;
  192.     short    temp;
  193.     
  194.     msg = GetMsg();
  195.     msg->mTo = GetFSTid();
  196.     msg->mSData[0] = refNum;
  197.     msg->mCode = FS_GETEOF;
  198.     mid = msg->mId;
  199.     Send( msg );
  200. #ifdef    APPLEIPC
  201.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  202.         SpinCursor( 1 );
  203. #else    APPLEIPC
  204.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  205. #endif    APPLEIPC
  206.     *logEOF = msg->mOData[0];
  207.     temp = msg->mStatus;
  208.     FreeMsg( msg );
  209.     return temp;
  210. }
  211.  
  212. short
  213. ASetEOF( short refNum, long logEOF )
  214. {
  215.     message    *msg;
  216.     long    mid;
  217.     short    temp;
  218.     
  219.     msg = GetMsg();
  220.     msg->mTo = GetFSTid();
  221.     msg->mSData[0] = refNum;
  222.     msg->mCode = FS_SETEOF;
  223.     msg->mOData[0] = logEOF;
  224.     mid = msg->mId;
  225.     Send( msg );
  226. #ifdef    APPLEIPC
  227.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  228.         SpinCursor( 1 );
  229. #else    APPLEIPC
  230.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  231. #endif    APPLEIPC
  232.     temp = msg->mStatus;
  233.     FreeMsg( msg );
  234.     return temp;
  235. }
  236.  
  237. short
  238. AAllocate( short refNum, long *count )
  239. {
  240.     message    *msg;
  241.     long    mid;
  242.     short    temp;
  243.     
  244.     msg = GetMsg();
  245.     msg->mTo = GetFSTid();
  246.     msg->mSData[0] = refNum;
  247.     msg->mOData[0] = *count;
  248.     msg->mCode = FS_ALLOCATE;
  249.     mid = msg->mId;
  250.     Send( msg );
  251. #ifdef    APPLEIPC
  252.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  253.         SpinCursor( 1 );
  254. #else    APPLEIPC
  255.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  256. #endif    APPLEIPC
  257.     *count = msg->mOData[0];
  258.     temp = msg->mStatus;
  259.     FreeMsg( msg );
  260.     return temp;
  261. }
  262.  
  263. short
  264. AFSClose( short refNum )
  265. {
  266.     message    *msg;
  267.     long    mid;
  268.     short    temp;
  269.     
  270.     msg = GetMsg();
  271.     msg->mTo = GetFSTid();
  272.     msg->mSData[0] = refNum;
  273.     msg->mCode = FS_CLOSE;
  274.     mid = msg->mId;
  275.     Send( msg );
  276. #ifdef    APPLEIPC
  277.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  278.         SpinCursor( 1 );
  279. #else    APPLEIPC
  280.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  281. #endif    APPLEIPC
  282.     temp = msg->mStatus;
  283.     FreeMsg( msg );
  284.     return temp;
  285. }
  286.  
  287. short
  288. ACreate( char *fileName, short vRefNum, long creator, long fileType )
  289. {
  290.     message    *msg;
  291.     long    mid;
  292.     short    temp;
  293.     
  294.     msg = GetMsg();
  295.     msg->mTo = GetFSTid();
  296.     msg->mSData[0] = vRefNum;
  297.     msg->mSData[1] = fileType;
  298.     msg->mSData[2] = creator;
  299.     msg->mDataPtr = fileName;
  300.     for(temp=0; fileName[temp]; temp++ )
  301.         ;
  302.     msg->mDataSize = temp;
  303.     msg->mCode = FS_CREATE;
  304.     mid = msg->mId;
  305.     Send( msg );
  306. #ifdef    APPLEIPC
  307.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  308.         SpinCursor( 1 );
  309. #else    APPLEIPC
  310.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  311. #endif    APPLEIPC
  312.     temp = msg->mStatus;
  313.     FreeMsg( msg );
  314.     return temp;
  315. }
  316.  
  317. short
  318. AFSDelete( char *fileName, short vRefNum )
  319. {
  320.     message    *msg;
  321.     long    mid;
  322.     short    temp;
  323.  
  324.     msg = GetMsg();
  325.     msg->mTo = GetFSTid();
  326.     msg->mSData[0] = vRefNum;
  327.     msg->mDataPtr = fileName;
  328.     for(temp=0; fileName[temp]; temp++ )
  329.         ;
  330.     msg->mDataSize = temp;
  331.     msg->mCode = FS_DELETE;
  332.     mid = msg->mId;
  333.     Send( msg );
  334. #ifdef    APPLEIPC
  335.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  336.         SpinCursor( 1 );
  337. #else    APPLEIPC
  338.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  339. #endif    APPLEIPC
  340.     temp = msg->mStatus;
  341.     FreeMsg( msg );
  342.     return temp;
  343. }
  344.  
  345. short
  346. AGetFInfo( char *fileName, short vRefNum, FInfo *fndrInfo )
  347. {
  348.  
  349.     char    string[64];
  350.     short    temp;
  351.     message    *msg;
  352.     long    mid;
  353.     
  354.     for(temp=0; fileName[temp]; temp++ )
  355.         ;
  356.     BlockMove( fileName, string, temp );
  357.     msg = GetMsg();
  358.     msg->mTo = GetFSTid();
  359.     msg->mSData[0] = vRefNum;
  360.     msg->mDataPtr = string;
  361.     msg->mDataSize = temp;
  362.     msg->mCode = FS_GETFINFO;
  363.     mid = msg->mId;
  364.     Send( msg );
  365. #ifdef    APPLEIPC
  366.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  367.         SpinCursor( 1 );
  368. #else    APPLEIPC
  369.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  370. #endif    APPLEIPC
  371.     temp = msg->mStatus;
  372.     BlockMove( string, (char *)fndrInfo, sizeof(FInfo) );
  373.     FreeMsg( msg );
  374.     return temp;    
  375. }
  376.  
  377. short
  378. ASetFInfo( char *fileName, short vRefNum, FInfo *fndrInfo )
  379. {
  380.     char    string[sizeof(FInfo)+64];
  381.     short    temp;
  382.     message    *msg;
  383.     long    mid;
  384.     
  385.     BlockMove( (char *)fndrInfo, string, sizeof(FInfo) );
  386.     for(temp=0; fileName[temp]; temp++ )
  387.         ;
  388.     BlockMove( fileName, string + sizeof(FInfo), temp);
  389.     msg = GetMsg();
  390.     msg->mTo = GetFSTid();
  391.     msg->mSData[0] = vRefNum;
  392.     msg->mDataPtr = string;
  393.     msg->mDataSize = temp + sizeof(FInfo);
  394.     msg->mCode = FS_SETFINFO;
  395.     mid = msg->mId;
  396.     Send( msg );
  397. #ifdef    APPLEIPC
  398.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  399.         SpinCursor( 1 );
  400. #else    APPLEIPC
  401.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  402. #endif    APPLEIPC
  403.     temp = msg->mStatus;
  404.     FreeMsg( msg );
  405.     return temp;    
  406. }
  407.  
  408. short
  409. ASetFLock( char *fileName, short vRefNum )
  410. {
  411.     message    *msg;
  412.     long    mid;
  413.     short    temp;
  414.     
  415.     msg = GetMsg();
  416.     msg->mTo = GetFSTid();
  417.     msg->mSData[0] = vRefNum;
  418.     msg->mDataPtr = fileName;
  419.     for(temp=0; fileName[temp]; temp++ )
  420.         ;
  421.     msg->mDataSize = temp;
  422.     msg->mCode = FS_SETFLOCK;
  423.     mid = msg->mId;
  424.     Send( msg );
  425. #ifdef    APPLEIPC
  426.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  427.         SpinCursor( 1 );
  428. #else    APPLEIPC
  429.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  430. #endif    APPLEIPC
  431.     temp = msg->mStatus;
  432.     FreeMsg( msg );
  433.     return temp;
  434. }
  435.  
  436. short
  437. ARstFLock( char *fileName, short vRefNum )
  438. {
  439.     message    *msg;
  440.     long    mid;
  441.     short    temp;
  442.     
  443.     msg = GetMsg();
  444.     msg->mTo = GetFSTid();
  445.     msg->mSData[0] = vRefNum;
  446.     msg->mDataPtr = fileName;
  447.     for(temp=0; fileName[temp]; temp++ )
  448.         ;
  449.     msg->mDataSize = temp;
  450.     msg->mCode = FS_RSTFLOCK;
  451.     mid = msg->mId;
  452.     Send( msg );
  453. #ifdef    APPLEIPC
  454.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  455.         SpinCursor( 1 );
  456. #else    APPLEIPC
  457.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  458. #endif    APPLEIPC
  459.     temp = msg->mStatus;
  460.     FreeMsg( msg );
  461.     return temp;
  462. }
  463.  
  464. short
  465. ARename( char *oldName, short vRefNum, char *newName )
  466. {
  467.     message    *msg;
  468.     long    mid;
  469.     short    temp, temp2;
  470.     char    string[130];
  471.     
  472.     msg = GetMsg();
  473.     msg->mTo = GetFSTid();
  474.     msg->mSData[0] = vRefNum;
  475.     for(temp=0; oldName[temp]; temp++ )
  476.         ;
  477.     for(temp2=0; oldName[temp2]; temp2++ )
  478.         ;
  479.     BlockMove( oldName, string, temp );
  480.     BlockMove( newName, string + temp, temp2 );
  481.     msg->mSData[1] = temp;
  482.     msg->mSData[2] = temp2;
  483.     msg->mDataPtr = string;
  484.     msg->mDataSize = temp + temp2;
  485.     msg->mCode = FS_RENAME;
  486.     mid = msg->mId;
  487.     Send( msg );
  488. #ifdef    APPLEIPC
  489.     while(!(msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil)))
  490.         SpinCursor( 1 );
  491. #else    APPLEIPC
  492.     msg = Receive( mid, OS_MATCH_ALL, OS_MATCH_ALL, 0 );
  493. #endif    APPLEIPC
  494.     temp = msg->mStatus;
  495.     FreeMsg( msg );
  496.     return temp;
  497. }
  498.  
  499. static    tid_type        FSTID = 0;
  500.  
  501. static tid_type GetFSTid ()
  502. {
  503.     struct ra_GetCards    get_cards;
  504.     message                *msgptr;
  505.     unsigned short        index;
  506.     short                s;
  507.     
  508.     if (FSTID)
  509.         return FSTID;
  510.     
  511.     if (GetICCTID () != 0)
  512.     {
  513.         if ((msgptr = GetMsg ()) == NULL)
  514.             return (FSTID);
  515.     
  516.         msgptr -> mCode = ICC_GETCARDS;
  517.         msgptr -> mDataPtr = (char *) &get_cards;
  518.         msgptr -> mDataSize = sizeof (struct ra_GetCards);
  519.         msgptr -> mTo = GetICCTID ();
  520.         Send (msgptr);
  521.         
  522. #ifdef    APPLEIPC
  523.         while(!(msgptr = Receive( OS_MATCH_ALL, OS_MATCH_ALL, ICC_GETCARDS+1, -1, nil)))
  524.             SpinCursor( 1 );
  525. #else    APPLEIPC
  526.         msgptr = Receive (OS_MATCH_ALL, OS_MATCH_ALL, ICC_GETCARDS+1,  OS_NO_TIMEOUT);
  527. #endif    APPLEIPC
  528.                 
  529.         if (msgptr -> mStatus == 0)
  530.         {
  531.             for (s = 0; (s < IC_MAXCARDS) && (FSTID == 0); s++)
  532.             {
  533.                 if (get_cards.tid [s] > 0)
  534.                 {
  535.                     index = 0;
  536.                     FSTID = Lookup_Task (kFileSystemObjectName, kFileSystemTypeName,
  537.                                 get_cards.tid [s], &index);
  538.                 }
  539.             }
  540.         }
  541.         FreeMsg (msgptr);
  542.     }
  543.     else
  544.     {
  545.         index = 0;
  546.         FSTID = Lookup_Task (kFileSystemObjectName, kFileSystemTypeName, GetNameTID (), &index);
  547.     }        
  548.  
  549.     return (FSTID);
  550. }
  551.